10
תגובות

איך המחלקה שלי ?

פתח משהה ,
עשיתי בעבר מחלקה לעבודה עם מסד נתונים והיא לא הייתה משו, אז החלטתי להתחיל מחדש ולהתייחס להערות שנתנו לי.
אז יצרתי שתי מחלקות, האחת Database שהיא אחראית על הקשר עם המסד, והשנייה SqlStatement שהיא אחראית על השאילתה עצמה.

Database : http://pastebin.com/MkhCVpiD

SqlStatement : http://pastebin.com/zSqXLAAy

איך המחלקות ? הם טובות לעבודה עם PDO או שיש עוד דברים שאני צריך לעבוד עליהם ?

תודה (:

10 תשובות

avatar ענה intval ב 12 לספטמבר 2013 #

בגדול אחלה.
אם יש בעיות - אתה תיתקל בהם כשתשתמש במחלקה שלך בעצמך.
למשל איך אני עושה שני טרנזקציות במקביל ?

יש דברים שלא מלמדים במדריכי OOP, כמו זה שפונקציה צריכה להחזיר רק סוג נתונים אחד
פונקציות מסוג return transaction object or false זה סלט.

פונקציות מסוימות בכלל לא צריכות להחזיר שום דבר.
מה נותן לך true or false מ rollback? אתה קיבלת true אתה מתעלם. אם יקבלת false - מה תעשה? תנסה שנית?
בתור לקוח של המחלקה אתה אפילו לא תחשוב לנסות שוב, וגם אתה לא צריך. שהמחלקה תנסה שנית לבד. (שזה חסר טועלת בפני עצמו, כי מה השתנה מאז הפעם הקודמת)
פונקציה כזו צריכה או לא להחזיר שום דבר, או לזרוק שגיאה.


עוד דבר, תשכח מהפקודה die. לתמיד.
קודם כל שגיאות לא צריכות להגיע ללקוח בכלל.
שנית, ה die הזה מפסיק את הביצוע של הקוד במקומות אחרים. אולי הייתי באמצע לשלוח אימייל למישהו ופתחתי חיבור לשרת אחר, אחרי זה הלכתי לקרוא רגע משהו מהמסד והוא נפל? נשאר לי בשרת קבצים / דברים פתוחים.

תשכח מ die. אין שום סיבה בתוכנה כלשהי להשתמש בזה.
ואחרי שתוריד את ה die תבין שכל ה try/catch בקונסטרקטור מיותר. שיזרוק שגיאה ישירות לרמה מעל.

avatar ענה משהה ב 15 לספטמבר 2013 #

מזתומרת שתי טרנזקציות במקביל ? לא נגעתי כל כך בטרנזקציות, רק עשיתי בדיקה במחלקה שלי אם יש שימוש בטרנזקציה..זה טוב או שאני פשוט צריך להשאיר את זה כמו שעשו את זה במחלקה שירשתי ממנה ?

סבבה אז במקום die להשתמש במחלקה לשגיאות ?
ולמה לא try&ctach ? השתמשתי בזה כדי שהמשתמש לא יצטרך לעשות את זה בעצמו אז הכנסתי את זה לתוך הקונסטרקטור

avatar ענה intval ב 16 לספטמבר 2013 #

לגבי טרנזקציות יש שני אפשריות - או להעתמק ולהבין מה עושים איתם ומה כדאי שהמחלקה תעשה איתם
או לא להתעמק ולא לעשות איתם שום דבר.

לגבי try/catch - זה מעולה. רק אחרי שתשים אותה - תבין שאין לך ממש מה לכתוב בבלוק של ה catch
בגלל זה זה יהיה מיותר שם.

avatar ענה משהה ב 16 לספטמבר 2013 #

ואיפה אני יכול ללמוד להתעמק בטרנזקציות ?

אולי ליצור מחלקה של שגיאות ובcatch פשוט להכניס לה את האובייקט $e?
שיצא משו כזה:
http://phpguide.co.il/phplive?code=841

avatar ענה intval ב 17 לספטמבר 2013 #

לא. בשביל מה להדפיס משהו?
אתה לא יודע אם הבן אדם שמשתמש במחלקה שלך רוצה בכלל להדפיס משהו.
פשוט תחזיר לו את השגיאה ושיעשה איתה מה שהוא חושב לנכון.

avatar ענה משהה ב 18 לספטמבר 2013 #

מממ צודק.
אז אתה אומר שכדאי להשאיר את זה ככה, ושהמשתמש יעשה try/catch בעצמו ?

avatar ענה intval ב 18 לספטמבר 2013 #

בדיוק.
אתה מסיים את העבודה ב throw

avatar ענה משהה ב 18 לספטמבר 2013 #

אבל אני לא צריך throw כי אני מוחק את הtry/ctach לא ?

avatar ענה intval ב 18 לספטמבר 2013 #

במקרה הספציפי של הקונסטרטור כאן - אתה לא צריך throw כי כבר יש throw מובנה בתוך הקונסטרקטור של PDO.
במקרים אחרי - אתה תמיד מחזיר שגיאה איפה שאתה יכול.

avatar ענה משהה ב 22 לספטמבר 2013 #

אה סבבה, ואיך אני מחזיר שגיאות ? זורק אקספשיינס?